package com.xiaohan.usercenter.common;

/**
 * @program: backend
 * @description: 对BaseResponse的封装返回
 * @author: 韩小豪
 * @create: 2025-02-27 21:05
 **/

public class ResultUtils {

	/**
	 * 泛型方法
	 * <p>
	 * 第一个T的作用为：标明当前方法为泛型方法，即形参的类型可以根据使用时具体传入的确定
	 * 【例】
	 * 当方法形参传入的参数类型为String时，则方法内所使用到的该实参data的类型就是String
	 * <p>
	 * 第二个T的作用为：标明当前方法的返回值为一个泛型类，其中该BaseResponse中的data的类型由return new BaseResponse<>(200, data, "ok");中data确定
	 * 【例】
	 * BaseResponse<T> baseResponse = ResultUtils.success(new User()); -->  此时 BaseResponse<T> == BaseResponse<User>
	 * baseResponse.data.getClassName = User.Class;
	 *
	 * @param data 要返回的对象数据体
	 * @param <T>
	 * @return
	 */
	public static <T> BaseResponse<T> success(T data) {
		return new BaseResponse<>(200, data, "ok");
	}

	/**
	 * 由于data为null，因此 BaseResponse 无需写成 BaseResponse<>
	 *
	 * @param errorCode 请求错误的相应封装
	 * @return
	 */
	public static BaseResponse error(ErrorCode errorCode) {
		return new BaseResponse<>(errorCode.getCode(), null, errorCode.getMsg(), errorCode.getDescription());
	}

	public static BaseResponse error(ErrorCode errorCode, String description) {
		return new BaseResponse<>(errorCode.getCode(), null, errorCode.getMsg(), description);  //自定义描述
	}

	public static BaseResponse error(ErrorCode errorCode, String message, String description) {
		return new BaseResponse<>(errorCode.getCode(), null, message, description);   //自定义错误信息和错误描述
	}

	public static BaseResponse error(int errorCode, String message, String description) {
		return new BaseResponse<>(errorCode, null, message, description);   //自定义错误状态码
	}

}
